﻿using System;
using System.Timers;

class Program
{
    // 声明两个事件：Tick 和 Alarm
    public static event EventHandler Tick;
    public static event EventHandler Alarm;

    static void Main(string[] args)
    {
        // 创建一个时钟计时器，每隔 1 秒触发一次 Tick 事件
        Timer timer = new Timer(1000);
        timer.Elapsed += TimerElapsed;  // 绑定计时器的 Tick 事件
        timer.Start();

        // 设置闹钟时间，比如设定为 5 秒钟后响铃
        int alarmTime = 5;
        int elapsedTime = 0;

        // 模拟一个闹钟计时
        while (elapsedTime < alarmTime)
        {
            // 等待每次 Tick 事件的发生
            System.Threading.Thread.Sleep(1000); // 每秒一次

            elapsedTime++;
        }

        // 当计时器时间到达设定闹钟时间时，触发 Alarm 事件
        OnAlarm();

        // 保持控制台打开
        Console.ReadLine();
    }

    // 定义触发 Tick 事件的逻辑
    private static void TimerElapsed(object sender, ElapsedEventArgs e)
    {
        // 触发 Tick 事件
        OnTick();
    }

    // 定义触发 Tick 事件的触发器
    private static void OnTick()
    {
        // 如果 Tick 事件有订阅者，则触发该事件
        Tick?.Invoke(null, EventArgs.Empty);
    }

    // 定义触发 Alarm 事件的触发器
    private static void OnAlarm()
    {
        // 如果 Alarm 事件有订阅者，则触发该事件
        Alarm?.Invoke(null, EventArgs.Empty);
    }

    // 创建 Tick 事件的处理方法
    static void OnTickHandler(object sender, EventArgs e)
    {
        Console.WriteLine("嘀嗒..."); // 每秒钟嘀嗒一次
    }

    // 创建 Alarm 事件的处理方法
    static void OnAlarmHandler(object sender, EventArgs e)
    {
        Console.WriteLine("响铃！闹钟时间到！"); // 时间到达时响铃
    }

    // 静态构造函数来订阅事件
    static Program()
    {
        Tick += OnTickHandler;  // 订阅 Tick 事件
        Alarm += OnAlarmHandler;  // 订阅 Alarm 事件
    }
}